﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Core.Security.CoreMembership;
using Core.Message.Entities;
using Core.ExceptionHandling;
using Core.Controls.Message;
using System.Web.Security;
using Core.Common.Session;
using Core.NTier.UserInterface;
namespace vHCS.Account
{
    public partial class LocalLogin : BaseFormNotAuthorization
    {
        #region CONST
        private const string _PG_LDAP_LOGIN = "login.aspx";
        private const string _PG_DEFAULT = "~/Default.aspx";
        private const string _CSS_TXT = "txtbox";
        #endregion
        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                if (IsPostBack == false)
                {
                    
                    if (this.IsLoginPage == false) //Trường hợp bắt buộc đăng nhập LDAp trước
                    {
                        //Chưa đăng nhập LDAP
                        if (CoreMembershipProvider.CurrentLoginState == LoginState.LDAP
                            || string.IsNullOrEmpty(CoreMembershipProvider.CurrentLoginStateUser))
                        {
                            Response.Redirect(_PG_LDAP_LOGIN);
                        }

                        else if (CoreMembershipProvider.CurrentLoginState == LoginState.AUTHENTICATED)
                        {
                            Response.Redirect(_PG_DEFAULT);
                            //Đã đăng nhập 2 chế độ thành công
                        }
                        else // Đăng nhập thành công LDAP
                        {
                            this.txtLocalUsername.Enabled = false;
                            this.txtLocalUsername.ReadOnly = true;
                            this.txtLocalUsername.Text = CoreMembershipProvider.CurrentLoginStateUser;
                        }
                    }
                    else//Nếu được cấu hình là trang Login: Dành cho trường hợp chỉ cần đăng nhập bằng mật khẩu local
                    {

                        CoreMembershipProvider.CurrentLoginState = LoginState.LOCAL;
                        this.txtLocalUsername.Enabled = true;
                        this.txtLocalUsername.ReadOnly = false;
                        this.txtLocalUsername.CssClass = _CSS_TXT;
                    }
                    this.lblLoginFail.Visible = false;
                }
            }
            catch (Exception ex)
            {
                AlertMessage mess = UserInterfaceExceptionHandler.HandleExcetion(ex);
                MessageBox.Show(mess);
            }
        }

        protected void btnLogin_Click(object sender, EventArgs e)
        {
            try
            {
                this.lblLoginFail.Visible = false;

                if (CoreMembershipProvider.CurrentLoginState == LoginState.LOCAL)
                {
                    CoreMembershipProvider member = new CoreMembershipProvider();
                    CoreMembershipProvider.CurrentLoginState = LoginState.LOCAL;
                    bool isValid = member.ValidateUser(this.txtLocalUsername.Text.Trim().ToLower(), this.txtLocalPassword.Text);
                    if (isValid)
                        FormsAuthentication.RedirectFromLoginPage(this.txtLocalUsername.Text.ToLower(), this.chkRemember.Checked);
                    else //Hiển thị thông báo
                        lblLoginFail.Visible = true;
                }
                else Response.Redirect(_PG_LDAP_LOGIN);
               
            }              
            catch (Exception ex)
            {
                AlertMessage mess = UserInterfaceExceptionHandler.HandleExcetion(ex);
                MessageBox.Show(mess);
            }
        }

        /// <summary>
        /// Kiểm tra đây có phải là trang được cấu hình là trang Login trong webconfig không
        /// </summary>
        protected bool IsLoginPage{
            get {
                string strPageURL = this.Request.Path;
                string strLoginURL = FormsAuthentication.LoginUrl;
                return strPageURL.Equals(strLoginURL, StringComparison.OrdinalIgnoreCase);
            }
        }
    }
}